﻿using System;
using System.ComponentModel;
using System.Runtime.InteropServices;

namespace Teigha.Core
{
	public class OdGeNurbCurve3d : OdGeSplineEnt3d
	{
		[EditorBrowsable(EditorBrowsableState.Never)]
		public OdGeNurbCurve3d(IntPtr cPtr, bool cMemoryOwn) : base(GlobalsPINVOKE.OdGeNurbCurve3d_SWIGUpcast(cPtr), cMemoryOwn)
		{
			this.swigCPtr = new HandleRef(this, cPtr);
		}

		[EditorBrowsable(EditorBrowsableState.Never)]
		public static HandleRef getCPtr(OdGeNurbCurve3d obj)
		{
			if (obj != null)
			{
				return obj.swigCPtr;
			}
			return new HandleRef(null, IntPtr.Zero);
		}

		~OdGeNurbCurve3d()
		{
			this.Dispose();
		}

		public override void Dispose()
		{
			if (this.swigCPtr.Handle != IntPtr.Zero)
			{
				if (this.swigCMemOwn)
				{
					lock (this.locker)
					{
						if (this.swigCPtr.Handle != IntPtr.Zero && this.swigCMemOwn)
						{
							this.swigCMemOwn = false;
							GlobalsPINVOKE.delete_OdGeNurbCurve3d(this.swigCPtr);
						}
					}
					this.swigCMemOwn = false;
				}
				this.swigCPtr = new HandleRef(null, IntPtr.Zero);
			}
			GC.SuppressFinalize(this);
			base.Dispose();
		}

		public OdGeNurbCurve3d() : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_0(), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(OdGeNurbCurve3d source) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_1(OdGeNurbCurve3d.getCPtr(source)), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(int degree, OdGeKnotVector knots, OdGePoint3dArray controlPoints, bool isPeriodic) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_2(degree, OdGeKnotVector.getCPtr(knots), OdGePoint3dArray.getCPtr(controlPoints), isPeriodic), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(int degree, OdGeKnotVector knots, OdGePoint3dArray controlPoints) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_3(degree, OdGeKnotVector.getCPtr(knots), OdGePoint3dArray.getCPtr(controlPoints)), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(int degree, OdGeKnotVector knots, OdGePoint3dArray controlPoints, OdGeDoubleArray weights, bool isPeriodic) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_4(degree, OdGeKnotVector.getCPtr(knots), OdGePoint3dArray.getCPtr(controlPoints), OdGeDoubleArray.getCPtr(weights), isPeriodic), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(int degree, OdGeKnotVector knots, OdGePoint3dArray controlPoints, OdGeDoubleArray weights) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_5(degree, OdGeKnotVector.getCPtr(knots), OdGePoint3dArray.getCPtr(controlPoints), OdGeDoubleArray.getCPtr(weights)), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(int degree, OdGeKnotVector knots, OdGePoint3d controlPoints, uint numControlPoints, double[] weights, uint numWeights, bool isPeriodic) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_6(degree, OdGeKnotVector.getCPtr(knots), OdGePoint3d.getCPtr(controlPoints), numControlPoints, weights, numWeights, isPeriodic), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(int degree, OdGeKnotVector knots, OdGePoint3d controlPoints, uint numControlPoints, double[] weights, uint numWeights) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_7(degree, OdGeKnotVector.getCPtr(knots), OdGePoint3d.getCPtr(controlPoints), numControlPoints, weights, numWeights), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(int degree, OdGePolyline3d fitPolyline, bool isPeriodic) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_8(degree, OdGePolyline3d.getCPtr(fitPolyline), isPeriodic), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(int degree, OdGePolyline3d fitPolyline) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_9(degree, OdGePolyline3d.getCPtr(fitPolyline)), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(OdGePoint3dArray fitPoints, OdGeVector3d startTangent, OdGeVector3d endTangent, bool startTangentDefined, bool endTangentDefined, OdGeTol fitTol) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_10(OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent), startTangentDefined, endTangentDefined, OdGeTol.getCPtr(fitTol)), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(OdGePoint3dArray fitPoints, OdGeVector3d startTangent, OdGeVector3d endTangent, bool startTangentDefined, bool endTangentDefined) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_11(OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent), startTangentDefined, endTangentDefined), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(OdGePoint3dArray fitPoints, OdGeVector3d startTangent, OdGeVector3d endTangent, bool startTangentDefined) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_12(OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent), startTangentDefined), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(OdGePoint3dArray fitPoints, OdGeVector3d startTangent, OdGeVector3d endTangent) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_13(OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent)), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(OdGePoint3dArray fitPoints, OdGeTol fitTolerance) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_14(OdGePoint3dArray.getCPtr(fitPoints), OdGeTol.getCPtr(fitTolerance)), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(OdGePoint3dArray fitPoints) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_15(OdGePoint3dArray.getCPtr(fitPoints)), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(OdGePoint3dArray fitPoints, OdGeVector3dArray fitTangents, OdGeTol fitTolerance, bool isPeriodic) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_16(OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3dArray.getCPtr(fitTangents), OdGeTol.getCPtr(fitTolerance), isPeriodic), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(OdGePoint3dArray fitPoints, OdGeVector3dArray fitTangents, OdGeTol fitTolerance) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_17(OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3dArray.getCPtr(fitTangents), OdGeTol.getCPtr(fitTolerance)), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(OdGePoint3dArray fitPoints, OdGeVector3dArray fitTangents) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_18(OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3dArray.getCPtr(fitTangents)), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(OdGePoint3dArray fitPoints, OdGeVector3d startTangent, OdGeVector3d endTangent, bool startTangentDefined, bool endTangentDefined, OdGe.OdGeKnotParameterization knotParam, OdGeTol fitTolerance) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_19(OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent), startTangentDefined, endTangentDefined, (int)knotParam, OdGeTol.getCPtr(fitTolerance)), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(OdGePoint3dArray fitPoints, OdGeVector3d startTangent, OdGeVector3d endTangent, bool startTangentDefined, bool endTangentDefined, OdGe.OdGeKnotParameterization knotParam) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_20(OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent), startTangentDefined, endTangentDefined, (int)knotParam), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(OdGeEllipArc3d ellipse, int numSpans) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_21(OdGeEllipArc3d.getCPtr(ellipse), numSpans), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(OdGeEllipArc3d ellipse) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_22(OdGeEllipArc3d.getCPtr(ellipse)), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public OdGeNurbCurve3d(OdGeLineSeg3d lineSeg) : this(GlobalsPINVOKE.new_OdGeNurbCurve3d__SWIG_23(OdGeLineSeg3d.getCPtr(lineSeg)), true)
		{
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public int numFitPoints()
		{
			int result = GlobalsPINVOKE.OdGeNurbCurve3d_numFitPoints(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool getFitKnotParameterization(out OdGe.OdGeKnotParameterization knotParam)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_getFitKnotParameterization(this.swigCPtr, out knotParam);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool getFitPointAt(int fitPointIndex, OdGePoint3d point)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_getFitPointAt(this.swigCPtr, fitPointIndex, OdGePoint3d.getCPtr(point));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool getFitTolerance(OdGeTol fitTolerance)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_getFitTolerance(this.swigCPtr, OdGeTol.getCPtr(fitTolerance));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool getFitTangents(OdGeVector3d startTangent, OdGeVector3d endTangent)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_getFitTangents__SWIG_0(this.swigCPtr, OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool getFitTangents(OdGeVector3d startTangent, OdGeVector3d endTangent, out bool startTangentDefined, out bool endTangentDefined)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_getFitTangents__SWIG_1(this.swigCPtr, OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent), out startTangentDefined, out endTangentDefined);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool getFitData(OdGePoint3dArray fitPoints, OdGeTol fitTolerance, out bool tangentsExist, OdGeVector3d startTangent, OdGeVector3d endTangent)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_getFitData__SWIG_0(this.swigCPtr, OdGePoint3dArray.getCPtr(fitPoints), OdGeTol.getCPtr(fitTolerance), out tangentsExist, OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool getFitData(OdGePoint3dArray fitPoints, OdGeTol fitTolerance, out bool tangentsExist, OdGeVector3d startTangent, OdGeVector3d endTangent, out OdGe.OdGeKnotParameterization knotParam)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_getFitData__SWIG_1(this.swigCPtr, OdGePoint3dArray.getCPtr(fitPoints), OdGeTol.getCPtr(fitTolerance), out tangentsExist, OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent), out knotParam);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void getDefinitionData(out int degree, out bool rational, out bool periodic, OdGeKnotVector knots, OdGePoint3dArray controlPoints, OdGeDoubleArray weights)
		{
			GlobalsPINVOKE.OdGeNurbCurve3d_getDefinitionData(this.swigCPtr, out degree, out rational, out periodic, OdGeKnotVector.getCPtr(knots), OdGePoint3dArray.getCPtr(controlPoints), OdGeDoubleArray.getCPtr(weights));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public int numWeights()
		{
			int result = GlobalsPINVOKE.OdGeNurbCurve3d_numWeights(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public double weightAt(int weightIndex)
		{
			double result = GlobalsPINVOKE.OdGeNurbCurve3d_weightAt(this.swigCPtr, weightIndex);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool evalMode()
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_evalMode(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool getParamsOfC1Discontinuity(OdGeDoubleArray arg0, OdGeTol tol)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_getParamsOfC1Discontinuity__SWIG_0(this.swigCPtr, OdGeDoubleArray.getCPtr(arg0), OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool getParamsOfC1Discontinuity(OdGeDoubleArray arg0)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_getParamsOfC1Discontinuity__SWIG_1(this.swigCPtr, OdGeDoubleArray.getCPtr(arg0));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool getParamsOfG1Discontinuity(OdGeDoubleArray arg0, OdGeTol tol)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_getParamsOfG1Discontinuity__SWIG_0(this.swigCPtr, OdGeDoubleArray.getCPtr(arg0), OdGeTol.getCPtr(tol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool getParamsOfG1Discontinuity(OdGeDoubleArray arg0)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_getParamsOfG1Discontinuity__SWIG_1(this.swigCPtr, OdGeDoubleArray.getCPtr(arg0));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool setFitPointAt(int fitPointIndex, OdGePoint3d point)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_setFitPointAt(this.swigCPtr, fitPointIndex, OdGePoint3d.getCPtr(point));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool addFitPointAt(int fitPointIndex, OdGePoint3d point)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_addFitPointAt(this.swigCPtr, fitPointIndex, OdGePoint3d.getCPtr(point));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool addControlPointAt(double newKnot, OdGePoint3d point, double weight)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_addControlPointAt__SWIG_0(this.swigCPtr, newKnot, OdGePoint3d.getCPtr(point), weight);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool addControlPointAt(double newKnot, OdGePoint3d point)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_addControlPointAt__SWIG_1(this.swigCPtr, newKnot, OdGePoint3d.getCPtr(point));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool deleteControlPointAt(int index)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_deleteControlPointAt(this.swigCPtr, index);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool deleteFitPointAt(int fitPointIndex)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_deleteFitPointAt(this.swigCPtr, fitPointIndex);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool setFitKnotParameterization(OdGe.OdGeKnotParameterization knotParam)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_setFitKnotParameterization(this.swigCPtr, (int)knotParam);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool setFitTolerance(OdGeTol fitTol)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_setFitTolerance__SWIG_0(this.swigCPtr, OdGeTol.getCPtr(fitTol));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool setFitTolerance()
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_setFitTolerance__SWIG_1(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool setFitTangents(OdGeVector3d startTangent, OdGeVector3d endTangent)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_setFitTangents__SWIG_0(this.swigCPtr, OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool setFitTangents(OdGeVector3d startTangent, OdGeVector3d endTangent, bool startTangentDefined, bool endTangentDefined)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_setFitTangents__SWIG_1(this.swigCPtr, OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent), startTangentDefined, endTangentDefined);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d setFitData(OdGePoint3dArray fitPoints, OdGeVector3d startTangent, OdGeVector3d endTangent, OdGeTol fitTol)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_setFitData__SWIG_0(this.swigCPtr, OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent), OdGeTol.getCPtr(fitTol)), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d setFitData(OdGePoint3dArray fitPoints, OdGeVector3d startTangent, OdGeVector3d endTangent)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_setFitData__SWIG_1(this.swigCPtr, OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent)), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d setFitData(OdGeKnotVector fitKnots, OdGePoint3dArray fitPoints, OdGeVector3d startTangent, OdGeVector3d endTangent, OdGeTol fitTol, bool isPeriodic)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_setFitData__SWIG_2(this.swigCPtr, OdGeKnotVector.getCPtr(fitKnots), OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent), OdGeTol.getCPtr(fitTol), isPeriodic), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d setFitData(OdGeKnotVector fitKnots, OdGePoint3dArray fitPoints, OdGeVector3d startTangent, OdGeVector3d endTangent, OdGeTol fitTol)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_setFitData__SWIG_3(this.swigCPtr, OdGeKnotVector.getCPtr(fitKnots), OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent), OdGeTol.getCPtr(fitTol)), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d setFitData(OdGeKnotVector fitKnots, OdGePoint3dArray fitPoints, OdGeVector3d startTangent, OdGeVector3d endTangent)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_setFitData__SWIG_4(this.swigCPtr, OdGeKnotVector.getCPtr(fitKnots), OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent)), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d setFitData(int degree, OdGePoint3dArray fitPoints, OdGeTol fitTol)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_setFitData__SWIG_5(this.swigCPtr, degree, OdGePoint3dArray.getCPtr(fitPoints), OdGeTol.getCPtr(fitTol)), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d setFitData(int degree, OdGePoint3dArray fitPoints)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_setFitData__SWIG_6(this.swigCPtr, degree, OdGePoint3dArray.getCPtr(fitPoints)), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d setFitData(OdGePoint3dArray fitPoints, OdGeVector3d startTangent, OdGeVector3d endTangent, OdGe.OdGeKnotParameterization knotParam, OdGeTol fitTol)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_setFitData__SWIG_7(this.swigCPtr, OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent), (int)knotParam, OdGeTol.getCPtr(fitTol)), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d setFitData(OdGePoint3dArray fitPoints, OdGeVector3d startTangent, OdGeVector3d endTangent, OdGe.OdGeKnotParameterization knotParam)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_setFitData__SWIG_8(this.swigCPtr, OdGePoint3dArray.getCPtr(fitPoints), OdGeVector3d.getCPtr(startTangent), OdGeVector3d.getCPtr(endTangent), (int)knotParam), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool purgeFitData()
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_purgeFitData(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d addKnot(double newKnot)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_addKnot(this.swigCPtr, newKnot), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d insertKnot(double newKnot)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_insertKnot(this.swigCPtr, newKnot), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeSplineEnt3d setWeightAt(int fitPointIndex, double weight)
		{
			OdGeSplineEnt3d result = new OdGeSplineEnt3d(GlobalsPINVOKE.OdGeNurbCurve3d_setWeightAt(this.swigCPtr, fitPointIndex, weight), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d setEvalMode(bool evalMode)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_setEvalMode__SWIG_0(this.swigCPtr, evalMode), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d setEvalMode()
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_setEvalMode__SWIG_1(this.swigCPtr), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d joinWith(OdGeNurbCurve3d curve)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_joinWith(this.swigCPtr, OdGeNurbCurve3d.getCPtr(curve)), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d hardTrimByParams(double newStartParam, double newEndParam)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_hardTrimByParams(this.swigCPtr, newStartParam, newEndParam), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d makeRational(double weight)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_makeRational__SWIG_0(this.swigCPtr, weight), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d makeRational()
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_makeRational__SWIG_1(this.swigCPtr), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d makeClosed()
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_makeClosed(this.swigCPtr), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d makePeriodic()
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_makePeriodic(this.swigCPtr), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d makeNonPeriodic()
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_makeNonPeriodic(this.swigCPtr), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d makeOpen()
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_makeOpen(this.swigCPtr), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d elevateDegree(int plusDegree)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_elevateDegree(this.swigCPtr, plusDegree), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGeNurbCurve3d Assign(OdGeNurbCurve3d spline)
		{
			OdGeNurbCurve3d result = new OdGeNurbCurve3d(GlobalsPINVOKE.OdGeNurbCurve3d_Assign(this.swigCPtr, OdGeNurbCurve3d.getCPtr(spline)), false);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public OdGePoint3d evalPoint(double param, int hint)
		{
			OdGePoint3d result = new OdGePoint3d(GlobalsPINVOKE.OdGeNurbCurve3d_evalPoint(this.swigCPtr, param, hint), true);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public void evalPointDivider(double param, OdGePoint3d point, out double divider, int hint)
		{
			GlobalsPINVOKE.OdGeNurbCurve3d_evalPointDivider(this.swigCPtr, param, OdGePoint3d.getCPtr(point), out divider, hint);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void set(int degree, OdGeKnotVector knots, OdGePoint3dArray controlPoints, OdGeDoubleArray weights, bool isPeriodic)
		{
			GlobalsPINVOKE.OdGeNurbCurve3d_set__SWIG_0(this.swigCPtr, degree, OdGeKnotVector.getCPtr(knots), OdGePoint3dArray.getCPtr(controlPoints), OdGeDoubleArray.getCPtr(weights), isPeriodic);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public void set(int degree, OdGeKnotVector knots, OdGePoint3dArray controlPoints, OdGeDoubleArray weights)
		{
			GlobalsPINVOKE.OdGeNurbCurve3d_set__SWIG_1(this.swigCPtr, degree, OdGeKnotVector.getCPtr(knots), OdGePoint3dArray.getCPtr(controlPoints), OdGeDoubleArray.getCPtr(weights));
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
		}

		public bool buildFitData(OdGe.OdGeKnotParameterization knotParam)
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_buildFitData__SWIG_0(this.swigCPtr, (int)knotParam);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		public bool buildFitData()
		{
			bool result = GlobalsPINVOKE.OdGeNurbCurve3d_buildFitData__SWIG_1(this.swigCPtr);
			if (GlobalsPINVOKE.SWIGPendingException.Pending)
			{
				throw GlobalsPINVOKE.SWIGPendingException.Retrieve();
			}
			return result;
		}

		private object locker = new object();

		private HandleRef swigCPtr;
	}
}
